// CommunicatingFragment.java (或者一个单独的接口文件)
package com.example.learningnote;

import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; // 使用 androidx.fragment.app.Fragment

public class CommunicatingFragment extends Fragment {

    // 1. 定义接口
    public interface OnMessageSendListener {
        void onMessageSend(String message); // Activity 需要实现这个方法
    }

    private OnMessageSendListener messageListener;
    private TextView fragmentTextView;
    private Button sendToActivityButton;

    // 2. 在 onAttach 中获取 Activity 的引用并检查是否实现了接口
    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        // 确保宿主 Activity 实现了回调接口
        if (context instanceof OnMessageSendListener) {
            messageListener = (OnMessageSendListener) context;
        } else {
            // 如果 Activity 没有实现接口，抛出异常，强制实现
            throw new RuntimeException(context + " must implement OnMessageSendListener");
        }
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        // 加载 Fragment 的布局
        View view = inflater.inflate(R.layout.fragment_communicating, container, false);
        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        fragmentTextView = view.findViewById(R.id.fragment_message_textview);
        sendToActivityButton = view.findViewById(R.id.send_to_activity_button);

        // 3. 在 Fragment 中触发事件时调用接口方法
        sendToActivityButton.setOnClickListener(v -> {
            if (messageListener != null) {
                String messageToSend = "你好 Activity，我是 Fragment！";
                messageListener.onMessageSend(messageToSend);
            }
        });
    }

    // 5. Activity 调用 Fragment 的公共方法 (用于 Activity -> Fragment)
    public void updateText(String message) {
        if (fragmentTextView != null) {
            fragmentTextView.setText(message);
        } else {
            // 如果视图还没准备好，可以考虑缓存消息稍后更新，或记录日志
            System.out.println("CommunicatingFragment: TextView not ready to update.");
        }
    }


    // 4. 在 onDetach 中解除引用，防止内存泄漏
    @Override
    public void onDetach() {
        super.onDetach();
        messageListener = null; // 解除对 Activity 的引用
    }
}
